home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / jovept2.arc / MAKEUTIL.C < prev    next >
Text File  |  1985-05-30  |  3KB  |  159 lines

  1. /* file makeutil.c */
  2. /* utilities for "make" for ms-dos */
  3. /* K. Mitchum 7/84 */
  4.  
  5. #include <stdio.h>
  6. #include "bdos.h"
  7. #define ERROR -1
  8.  
  9. /* bdos utilities */
  10.  
  11. find_first(name)
  12. unsigned char *name;
  13. {
  14.     struct regval srv;
  15.     struct segs rv;
  16.     char *kludge;
  17.     kludge = name;
  18.     while(*kludge) {
  19.         if(isspace(*kludge)) *kludge = '/0';
  20.         else kludge++;
  21.     }
  22.     segread(&rv);
  23.     srv.ds = rv.sds;
  24.     srv.es = rv.ses;
  25.     
  26.     srv.cx = 0;
  27.     srv.ax = (O_FIND_FIRST);
  28.     srv.dx = name;
  29.     sysint21(&srv,&srv);
  30.     return(!(srv.ax & 0xff00));
  31. }
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. struct dta {
  40.     char dosuse[21];
  41.     char attr_found;
  42.     long dttime;
  43.     unsigned long dta_size;
  44.     char dta_name[13];
  45.     char dta_fill[90];
  46. };
  47.  
  48.  
  49. struct dta dta;
  50.  
  51. struct param_block pblock;
  52.  
  53. struct segs segs;
  54.  
  55. /* the following function must be called prior to using the */
  56. /* file date/time function */
  57.  
  58.  
  59.  
  60. set_dta()
  61. {
  62.     bdos(O_SET_DTA,&dta);
  63.     return;
  64. }
  65.  
  66.  
  67. /* version for compatibility with make. */
  68.  
  69. long dateof()
  70. {
  71.     static long datetime;
  72.  
  73.     datetime = dta.dttime;
  74.  
  75.  
  76.     return(datetime);
  77. }
  78.  
  79.  
  80. execl(cmd,arglist)
  81. char *cmd, *arglist;
  82. {
  83.     char buf[200];
  84.  
  85.     strcpy(buf,cmd);
  86.     strcat(buf," ");
  87.     strcat(buf,arglist);
  88.  
  89.     fprintf(stdout,"\n%s\n",buf);
  90.     
  91.     if(strcmp(cmd,"cc")==0) {
  92.         if(do_cc(buf,arglist)) return ERROR;
  93.     }
  94.     else {
  95.         if(system(buf)) return ERROR;
  96.         return(bdos(O_RET_CODE,0));
  97.     }
  98. }
  99.  
  100. do_cc(buf,arglist)
  101. char *buf, *arglist;
  102. {
  103.     int i;
  104.  
  105.     for(i = 1; i < 5; i++) {
  106.         sprintf(buf,"C:\\SYS\\CC%d.EXE",i);
  107.  
  108.         if(execf(buf,arglist)) return ERROR;
  109.         if(bdos(O_RET_CODE,0)) return ERROR;
  110.         if(i==1) stripflag(arglist);
  111.     }
  112.     return(0);
  113. }
  114.  
  115. stripflag(arglist)
  116. char *arglist;
  117. {
  118.     while(*arglist) {
  119.         if(*arglist == '-') *arglist = '\0';
  120.         else arglist++;
  121.     }
  122. }
  123.  
  124. execf(prog,arg)
  125. unsigned char *prog, *arg;
  126. {
  127.  
  128.   struct {unsigned int ax,bx,cx,dx,si,di,ds,es;}srv;
  129.   struct {
  130.     int env_seg;
  131.     char *line_off,*line_seg;
  132.     char *fcb1_off,*fcb1_seg;
  133.     char *fcb2_off,*fcb2_seg;
  134.   } ctrl;
  135.   unsigned char cline[128],*ep;
  136.   int status=-1;
  137.  
  138.   ctrl.fcb1 = "                                                              ";
  139.   ctrl.fcb2 = "                                                              ";
  140.  
  141.  
  142.  
  143.   if(strlen(prog)>123) return ERROR;
  144.   srv.ax=0x4800;
  145.   srv.bx=0xfff0;            /* look for a lot of memory */
  146.   if((sysint21(&srv,&srv)&1) && srv.bx<(64*17)) return ERROR;
  147.   cline[0]=strlen(arg);
  148.   strcpy(cline+1,arg);
  149.   segread(&srv.si);
  150.   ctrl.env_seg=0;
  151.   ctrl.line_off=cline;
  152.   ctrl.line_seg=srv.ds;
  153.   ep = prog;
  154.  
  155.   return(status=loadexec(ep,srv.ds,&ctrl,srv.ds,0));
  156.  
  157. }
  158.  
  159.